/**
 * 刷新主体内容滚动高度
 * @param 被刷新主体Class  className
 * @param 指定的滚动位置   scrollTop 
 */
export function refreshScrollTop(className = "main-content-body", scrollTop = 0) {
    var bodyPage = document.getElementsByClassName(className)[0]
    bodyPage ? bodyPage.scrollTop = scrollTop : false
}
/**
 * 深拷贝，解决指针问题
 * @param 被拷贝对象 obj 
 * @returns 
 */
export function deepCopy(obj) {
    return JSON.parse(JSON.stringify(obj));
}
/**
 * 是否为空对象
 * @param 被验证对象 object 
 * @returns 
 */
export function isEmptyObject(object) {
    return Object.keys(object).length === 0;
}

/**
 * json编码解码,默认编码
 * @param 内容 content 
 * @param 是否解码 status 
 * @returns 
 */
export function json(content, status = false) {
    if (status) {
        return JSON.stringify(content);
    }
    return eval('(' + content + ')');

}
/**
 * 判断元素是否在数组中
 * @param 搜索内容 search 
 * @param 被查证数组 array 
 * @returns 
 */
export function inArray(search, array) {
    for (var i in array) {
        if (array[i] == search) {
            return true;
        }
    }
    return false;
}

/**
 * 判断是否是对象
 * @param 被验证数组 array 
 * @returns 
 */
export function isArray(array) {
    return Object.prototype.toString.call(array) === '[object Array]';
}

/**
 * 合并到第一个对象obj1
 * @param {*} obj1 
 * @param {*} obj2 
 * @returns 
 */
export function one_assign(obj1, obj2, state = false) {
    for (const key in obj1) {
        if (obj2[key] != undefined) {
            obj1[key] = obj2[key];
        }
    }
    if (state) {
        return JSON.parse(JSON.stringify(obj1));
    }
    return obj1;
}

/**
 * 遍历整个树结构,符合某个条件，添加属性
 * @param 树 tree 
 * @param 目标值 targetId 
 * @param 被查找字段名称 field 
 * @param 树下级名称 childrenName 
 * @param 要添加的对象属性 attrName 默认{ disabled: true }
 * @returns 
 */
export function addDisabledToNode(tree, targetId, field = "id", childrenName = "children", attrName = { disabled: true }) {
    function traverse(nodes) {
        return nodes.map(node => {
            if (node[field] === targetId) {
                // 如果当前节点的id等于目标id，则给它添加指定属性
                return { ...node, ...attrName };
            } else if (node[childrenName]) {
                let obj = {};
                obj[childrenName] = traverse(node[childrenName]);
                // 递归遍历子节点
                return { ...node, ...obj };
            } else {
                return node;
            }
        });
    }
    return traverse(tree); // 从根节点开始遍历
}